先日より発売になりました、SORACOM LTE-M Button powered by AWSを購入しました。(写真の上のもの)
ご存じの無い方のために説明しますと、これはAWS IoT 1-Clickに対応した国内初のボタンとなり、これ1つで任意のLambda関数の実行などAWS上での処理が実行できるボタンとなります。
従来からAWS IoT Enterprise Button(写真の下のもの)の販売はありましたが、WiFi環境を別途用意する必要がありました。本製品はKDDIが提供するLTE回線にて接続できますので、屋外でも広い範囲で利用できます。(エリアはこちらでご確認ください)
またLTEを用いたLPWAであるLTE-Mの回線を利用しますので、通常のLTEよりも低電力で駆動でき、乾電池で長寿命が実現できることもポイントとなっています。
何を作ろうか
さて何を作ろうかと思っていた矢先、マイクロソフトのクラウド デベロッパー アドボケイト、「ちょまど」こと千代田まどかさんの以下のツイートが目にとまりました。
_人人人人人人人_
> つまらない <
> 会議から <
> 脱出したい時に <
> 押すボタン <
 ̄Y^Y^Y^Y^Y^Y^Y ̄
実在するのか… https://t.co/SNnjaXbjje— Madoka ちょまど@エンジニア兼マンガ家 (@chomado) November 15, 2018
誰しも、退屈な会議の経験はありますよね・・・
要人の方においては忍ばせておいたボタンを押すと側近の人(秘書?)が「次のお時間です」と連れ出してくれるとのこと。(詳しくは上記のツイートから記事をご覧ください)
一般人にはそれは無理なので、(忍ばせておいた) SORACOM LTE-M Buttonを押すと自分の携帯電話に電話が掛かってきて、会議を中座できるきっかけとなればいいな、ということで実装してみることにしました。
アーキテクチャ
記述するまでも無いほどシンプルなものになりました。
- SORACOM LTE-M Buttonを押す
- Lambda関数を実行し、TwilioのAPIを呼び出す
- Twilioにて携帯電話に電話を掛ける
設定方法
SORACOM LTE-M Buttonのセットアップ
ボタンに電池を挿入する際、内部に記載してあるDSNコードを控えておき、これをSORACOM ConsoleとAWS IoT 1-Clickに登録します。
SORACOMユーザコンソールへの登録
まずSORACOMユーザコンソールにログインし、メニューからガジェット⇒Buttonsに遷移します。デバイス登録ボタンをクリックし、控えていたDSNコードを入力します。
AWS IoT 1-Clickへの登録
続いてAWSマネジメントコンソールにログインし、IoTグループのIoT 1-Clickに遷移します。
デバイスの登録をクリックし、DSNコードを入力します。
続いてボタンをクリックするよう要求されます。
ボタンを押すと登録完了です。完了ボタンを押しましょう。
いやはや、事前に聞いてはいたものの恐ろしく簡単ですね。
Twilioのセットアップ
TwilioはAPIによってコントロールできる電話サービスです。
登録することで電話番号を取得でき、その電話番号での受発信がAPIでコントロール可能です。今回は発信のコントロールを行います。
アカウントの取得
今回私は初めての利用であったのでアカウント取得から行いました。
まず、Twilioのページにアクセスし、無料サインアップのアイコンをクリックします。
利用規約に同意後、氏名・メールアドレス等の情報を入力した後、携帯電話の電話番号の入力を求められます。入力した携帯電話に対してSMSで検証コードが送信され認証が完了です。
なお、トライアル(無料)アカウントではここで登録した電話番号のみに発信が可能であるため、電話を受けたい電話番号を登録することをお勧めします。
(有料アカウントにアップグレードすれば任意の番号に発信可能)
電話番号の取得
Twilioで利用できる電話番号を取得します。
電話番号の取得画面にアクセスします。
「最初のTwilio電話番号を取得」をクリックし電話番号を取得します。
トライアルで利用できる電話番号は050のIP電話番号のみです。
なお、選び直しが可能なようです。
クレデンシャル情報の確認
APIで呼び出しできるよう、クレデンシャル情報を確認しておきます。
設定画面にアクセスします。
ライブクレデンシャルの ACCOUNT SID と AUTH TOKENの内容をメモしておきます。
この情報がLambda関数からの呼び出しに必要になります。
Studio Flowの作成
電話を受けた後、任意のメッセージを再生できるよう、Studio Flowの作成を行います。
Studio Dashboardにアクセスし、Create a flowをクリックします。
続いてコールフローの名称を入力します。私は”escapemeeting-call”としました。
白紙から作成するので作成方法はStart from scratchとし、フロー作成画面に入ります。
WIDGET LIBRARYから、”Make Outgoing Call” と “Say/Play” のウィジェットをドラッグ、フローを繋げて以下のように設定します。
また、Say/Playのウィジェットでは読み上げるメッセージと言語(Japanese)を設定します。
話者はお好みで。
ここまでできたら、Publishボタンを押して完成です。
Studie Dashboardに戻り、作成したフローのSIDが表示されていますので、メモしておきます。
Lambda関数の設置
TwilioのAPIを呼び出して電話を掛けるPython 3.6関数を設置します。
まずLinux OS上の任意のフォルダでTwilioライブラリーを設置します。
$ pip install twilio -t .
続けて以下の内容で lambda_function.py ファイルを設置します。
from twilio.rest import Client account_sid = "(ACCOUNT SID)" auth_token = "(AUTH TOKEN)" def lambda_handler(event, context): client = Client(account_sid, auth_token) execution = client.studio.flows('フローのSID').executions.create( to="+81(発信先電話番号)", from_="+81(自分の050電話番号)" ) return execution.sid
アップロード用にzipアーカイブにまとめます。
$ zip -r upload.zip ./*
Python 3.6の新規Lambda関数を作成し、作成したzipファイルをアップロードします。
AWS内のリソースには特にアクセスしないため、最低限のロールで問題ありません。
Twilio APIの応答は若干時間が掛かるため、Lambdaのデフォルト実行時間(3秒)では終了しないことがあり、時間を10秒程度まで延ばすことをお勧めします。
AWS IoT 1-Clickのプロジェクト作成
最後にAWS IoT 1-Clickのプロジェクトを作成します。
今回のプロジェクト情報として任意の情報を入力します。
続けて呼び出すLambda関数と紐付けます。
プロジェクトが作成されました。続けてプレイスメントの設定を行います。
プレイスメントの設定で、登録したボタンのDSNコードと紐付けます。
これでボタンをクリックすることでLambda関数を呼べるようになりました。
動作
デモ
SORACOM LTE-M Buttonをクリックし、私の携帯電話に電話が掛かってくるようになりました。
これで退屈な会議から脱出できるきっかけ作りになります。
なお、ここまでの開発は2時間程度で完了しました。
お手軽に開発できる SORACOM LTE-M ButtonとAWSサービス、Twilioに感謝です。
またアイディアが思いついたら開発してみたいと思います。
プレゼン資料
本記事の内容をもとにLT資料を作成しましたので掲載します。
コメント